Flutter এর মধ্যে Bloc প্যাটার্ন

Mobile App Development - ফ্লাটার (Flutter) - Flutter এ State Management
227

BLoC (Business Logic Component) হলো একটি স্টেট ম্যানেজমেন্ট প্যাটার্ন যা Flutter এ ডেটা এবং স্টেট ম্যানেজ করার একটি কার্যকরী এবং স্কেলেবল উপায় প্রদান করে। BLoC প্যাটার্ন মূলত Reactive Programming ধারণার উপর ভিত্তি করে কাজ করে, যেখানে Streams এবং Sinks ব্যবহার করে স্টেট এবং ডেটা পরিচালনা করা হয়। এটি অ্যাপ্লিকেশনের UI এবং ব্যবসায়িক লজিককে আলাদা করে, ফলে কোড পরিষ্কার এবং পুনরায় ব্যবহারযোগ্য হয়।

BLoC প্যাটার্নের মূল ধারণা:

  • Streams: একটি স্ট্রিম হলো ডেটার ধারাবাহিক প্রবাহ, যা অ্যাসিঙ্ক্রোনাস ভাবে ডেটা বা ইভেন্ট প্রেরণ করে।
  • Sink: একটি Sink হলো এমন একটি স্থান যেখানে আপনি নতুন ডেটা বা ইভেন্ট পাঠাতে পারেন, যা পরবর্তীতে Stream এ প্রক্রিয়া করা হয়।
  • Business Logic: BLoC প্যাটার্নে, ব্যবসায়িক লজিক (যেমন API কল, ডেটা প্রসেসিং ইত্যাদি) BLoC ক্লাসে রাখা হয়, যা UI থেকে আলাদা থাকে।

BLoC প্যাটার্নের গঠন:

BLoC প্যাটার্ন তিনটি প্রধান অংশ নিয়ে গঠিত:

  1. Event: ব্যবহারকারী বা সিস্টেম থেকে আসা ইভেন্ট যা স্টেট পরিবর্তন করতে ব্যবহার করা হয়।
  2. State: অ্যাপ্লিকেশনের বর্তমান অবস্থা বা ডেটা, যা UI তে প্রদর্শিত হয়।
  3. BLoC: BLoC ক্লাস ইভেন্ট গ্রহণ করে এবং স্টেট আপডেট করে। এটি UI এবং ডেটা প্রসেসিং এর মধ্যে একটি মিডিয়েটর হিসেবে কাজ করে।

Flutter এ BLoC প্যাকেজ সেটআপ করা:

প্রথমে flutter_bloc এবং bloc প্যাকেজ ইনস্টল করতে হবে। আপনার pubspec.yaml এ নিচের মত করে প্যাকেজ যোগ করুন:

dependencies:
  flutter_bloc: ^8.0.0
  bloc: ^8.0.0

BLoC প্যাটার্নের উদাহরণ:

নিচে একটি সাধারণ Flutter অ্যাপের উদাহরণ দেয়া হলো যেখানে কাউন্টার ইনক্রিমেন্ট করা হচ্ছে। আমরা এখানে BLoC প্যাটার্ন ব্যবহার করে State Management করেছি।

১. Event তৈরি করা:

প্রথমে আমরা ইভেন্ট ডিফাইন করবো। এখানে একটি ইভেন্ট তৈরি করা হচ্ছে যা কাউন্টার ইনক্রিমেন্ট করবে।

// counter_event.dart
abstract class CounterEvent {}

class IncrementEvent extends CounterEvent {}

২. State তৈরি করা:

এখন আমরা আমাদের অ্যাপ্লিকেশনের State তৈরি করবো। এই State কাউন্টার ভ্যালু ধারণ করবে।

// counter_state.dart
class CounterState {
  final int counter;

  CounterState(this.counter);
}

৩. BLoC ক্লাস তৈরি করা:

এখন আমরা BLoC ক্লাস তৈরি করবো, যা ইভেন্ট গ্রহণ করে এবং স্টেট আপডেট করে। এখানে IncrementEvent ইভেন্ট প্রক্রিয়া করা হবে এবং কাউন্টার আপডেট করা হবে।

// counter_bloc.dart
import 'package:flutter_bloc/flutter_bloc.dart';
import 'counter_event.dart';
import 'counter_state.dart';

class CounterBloc extends Bloc<CounterEvent, CounterState> {
  CounterBloc() : super(CounterState(0)) {
    on<IncrementEvent>((event, emit) {
      emit(CounterState(state.counter + 1));
    });
  }
}
  • CounterBloc ক্লাসে আমরা Bloc এর কনস্ট্রাক্টর ব্যবহার করেছি। এটি CounterEvent এবং CounterState গ্রহণ করে।
  • on<IncrementEvent>: এটি ইভেন্ট লিসেন করে এবং সেই অনুযায়ী স্টেট আপডেট করে।

৪. UI তৈরি করা এবং BLoC ইন্টিগ্রেট করা:

এখন আমরা আমাদের UI তৈরি করবো এবং BLoC প্যাটার্নের সাথে ইন্টিগ্রেট করবো।

import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'counter_bloc.dart';
import 'counter_event.dart';
import 'counter_state.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: BlocProvider(
        create: (context) => CounterBloc(),
        child: CounterScreen(),
      ),
    );
  }
}

class CounterScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('BLoC Counter Example'),
      ),
      body: Center(
        child: BlocBuilder<CounterBloc, CounterState>(
          builder: (context, state) {
            return Text(
              'Counter: ${state.counter}',
              style: TextStyle(fontSize: 24),
            );
          },
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          context.read<CounterBloc>().add(IncrementEvent());
        },
        child: Icon(Icons.add),
      ),
    );
  }
}
  • BlocProvider: এটি BLoC কে পুরো Widget ট্রিতে সরবরাহ করে, ফলে তার চাইল্ড Widgets এ BLoC অ্যাক্সেস করা যায়।
  • BlocBuilder: এটি স্টেট লিসেন করে এবং যখনই স্টেট আপডেট হয়, UI পুনরায় রেন্ডার করে।
  • context.read<CounterBloc>().add(IncrementEvent()): এটি ইভেন্ট ট্রিগার করে এবং BLoC কে বলে যে স্টেট আপডেট করতে হবে।

BLoC প্যাটার্নের সুবিধা:

  • Business Logic এবং UI আলাদা রাখা: BLoC প্যাটার্ন ব্যবহার করে আপনি আপনার ব্যবসায়িক লজিক এবং UI কে আলাদা রাখতে পারবেন, ফলে কোড পরিষ্কার এবং মেইনটেইন করা সহজ।
  • Scalable: এটি বড় এবং জটিল অ্যাপ্লিকেশন তৈরিতে সহায়ক, কারণ স্টেট এবং ডেটা এক কেন্দ্রীয় স্থানে ম্যানেজ করা হয়।
  • Reactive Programming: BLoC প্যাটার্ন স্ট্রিম এবং সিঙ্ক ব্যবহার করে ডেটা প্রসেসিং করে, যা অ্যাসিঙ্ক্রোনাস ডেটা ম্যানেজমেন্টকে সহজ করে।

BLoC প্যাটার্ন ব্যবহারের উপযোগিতা:

  • ছোট থেকে বড় অ্যাপ্লিকেশনে: ছোট অ্যাপ্লিকেশনেও BLoC প্যাটার্ন ব্যবহার করা যেতে পারে যদি আপনি আপনার অ্যাপের ভবিষ্যৎ স্কেল করার পরিকল্পনা করেন।
  • ডেটা-নির্ভর অ্যাপ্লিকেশন: যদি আপনার অ্যাপ্লিকেশন অনেক ডেটা প্রক্রিয়াকরণ এবং স্টেট পরিবর্তনের উপর নির্ভর করে, তাহলে BLoC প্যাটার্ন একটি চমৎকার পছন্দ।
  • UI রিফ্রেশ করা: যেহেতু BLoC প্যাটার্ন Streams ব্যবহার করে, তাই UI স্বয়ংক্রিয়ভাবে আপডেট হয় যখন স্টেট পরিবর্তন হয়।

Flutter এ BLoC প্যাটার্নের সংক্ষিপ্ত তুলনা:

বৈশিষ্ট্যBLoC প্যাটার্ন
আলাদা লজিক ও UIব্যবসায়িক লজিক এবং UI আলাদা রাখে
ডেটা এবং স্টেট ম্যানেজমেন্টসেন্ট্রাল জায়গায় ডেটা এবং স্টেট ম্যানেজ করে
Reactive Programmingস্ট্রিম এবং সিঙ্ক ব্যবহার করে অ্যাসিঙ্ক্রোনাস প্রক্রিয়া করে
স্কেলেবিলিটিমাঝারি থেকে বড় অ্যাপ্লিকেশনের জন্য উপযোগী

BLoC প্যাটার্ন ব্যবহার করে Flutter এ একটি স্কেলেবল এবং কার্যকরী অ্যাপ্লিকেশন তৈরি করা যায়, যেখানে ব্যবসায়িক লজিক এবং UI আলাদা রেখে কোড পুনঃব্যবহারযোগ্য এবং মেইনটেইনেবল রাখা সম্ভব।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...